{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:28:32.859181Z",
     "iopub.status.busy": "2025-01-23T07:28:32.858658Z",
     "iopub.status.idle": "2025-01-23T07:28:38.315317Z",
     "shell.execute_reply": "2025-01-23T07:28:38.314782Z",
     "shell.execute_reply.started": "2025-01-23T07:28:32.859143Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:47:51.767170Z",
     "start_time": "2025-03-01T08:47:38.135950Z"
    }
   },
   "source": [
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import sklearn\n",
    "import pandas as pd\n",
    "import os\n",
    "import sys\n",
    "import time\n",
    "from tqdm.auto import tqdm\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "print(sys.version_info)\n",
    "for module in mpl, np, pd, sklearn, torch:\n",
    "    print(module.__name__, module.__version__)\n",
    "    \n",
    "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
    "print(device)\n",
    "\n",
    "seed = 42\n",
    "torch.manual_seed(seed)\n",
    "torch.cuda.manual_seed_all(seed)\n"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sys.version_info(major=3, minor=12, micro=3, releaselevel='final', serial=0)\n",
      "matplotlib 3.10.0\n",
      "numpy 2.0.2\n",
      "pandas 2.2.3\n",
      "sklearn 1.6.1\n",
      "torch 2.6.0+cu126\n",
      "cuda:0\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 准备数据"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:29:26.714983Z",
     "iopub.status.busy": "2025-01-23T07:29:26.714605Z",
     "iopub.status.idle": "2025-01-23T07:29:54.558733Z",
     "shell.execute_reply": "2025-01-23T07:29:54.558123Z",
     "shell.execute_reply.started": "2025-01-23T07:29:26.714959Z"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-03-01T08:47:54.799460Z",
     "start_time": "2025-03-01T08:47:51.768165Z"
    }
   },
   "source": [
    "!pip install tensorflow"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Defaulting to user installation because normal site-packages is not writeable\n",
      "Looking in indexes: https://mirrors.aliyun.com/pypi/simple/\n",
      "Requirement already satisfied: tensorflow in c:\\program files\\python312\\lib\\site-packages (2.18.0)\n",
      "Requirement already satisfied: tensorflow-intel==2.18.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow) (2.18.0)\n",
      "Requirement already satisfied: absl-py>=1.0.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (2.1.0)\n",
      "Requirement already satisfied: astunparse>=1.6.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (1.6.3)\n",
      "Requirement already satisfied: flatbuffers>=24.3.25 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (25.2.10)\n",
      "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (0.6.0)\n",
      "Requirement already satisfied: google-pasta>=0.1.1 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (0.2.0)\n",
      "Requirement already satisfied: libclang>=13.0.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (18.1.1)\n",
      "Requirement already satisfied: opt-einsum>=2.3.2 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (3.4.0)\n",
      "Requirement already satisfied: packaging in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (24.2)\n",
      "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev,>=3.20.3 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (5.29.3)\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (2.32.3)\n",
      "Requirement already satisfied: setuptools in c:\\users\\13351\\appdata\\roaming\\python\\python312\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (75.6.0)\n",
      "Requirement already satisfied: six>=1.12.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (1.17.0)\n",
      "Requirement already satisfied: termcolor>=1.1.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (2.5.0)\n",
      "Requirement already satisfied: typing-extensions>=3.6.6 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (4.12.2)\n",
      "Requirement already satisfied: wrapt>=1.11.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (1.17.2)\n",
      "Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (1.70.0)\n",
      "Requirement already satisfied: tensorboard<2.19,>=2.18 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (2.18.0)\n",
      "Requirement already satisfied: keras>=3.5.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (3.8.0)\n",
      "Requirement already satisfied: numpy<2.1.0,>=1.26.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (2.0.2)\n",
      "Requirement already satisfied: h5py>=3.11.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (3.13.0)\n",
      "Requirement already satisfied: ml-dtypes<0.5.0,>=0.4.0 in c:\\program files\\python312\\lib\\site-packages (from tensorflow-intel==2.18.0->tensorflow) (0.4.1)\n",
      "Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\\program files\\python312\\lib\\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.18.0->tensorflow) (0.45.1)\n",
      "Requirement already satisfied: rich in c:\\program files\\python312\\lib\\site-packages (from keras>=3.5.0->tensorflow-intel==2.18.0->tensorflow) (13.9.4)\n",
      "Requirement already satisfied: namex in c:\\program files\\python312\\lib\\site-packages (from keras>=3.5.0->tensorflow-intel==2.18.0->tensorflow) (0.0.8)\n",
      "Requirement already satisfied: optree in c:\\program files\\python312\\lib\\site-packages (from keras>=3.5.0->tensorflow-intel==2.18.0->tensorflow) (0.14.0)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\program files\\python312\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.18.0->tensorflow) (3.4.1)\n",
      "Requirement already satisfied: idna<4,>=2.5 in c:\\program files\\python312\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.18.0->tensorflow) (3.10)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\program files\\python312\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.18.0->tensorflow) (2.3.0)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\program files\\python312\\lib\\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.18.0->tensorflow) (2024.12.14)\n",
      "Requirement already satisfied: markdown>=2.6.8 in c:\\program files\\python312\\lib\\site-packages (from tensorboard<2.19,>=2.18->tensorflow-intel==2.18.0->tensorflow) (3.7)\n",
      "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\\program files\\python312\\lib\\site-packages (from tensorboard<2.19,>=2.18->tensorflow-intel==2.18.0->tensorflow) (0.7.2)\n",
      "Requirement already satisfied: werkzeug>=1.0.1 in c:\\program files\\python312\\lib\\site-packages (from tensorboard<2.19,>=2.18->tensorflow-intel==2.18.0->tensorflow) (3.1.3)\n",
      "Requirement already satisfied: MarkupSafe>=2.1.1 in c:\\program files\\python312\\lib\\site-packages (from werkzeug>=1.0.1->tensorboard<2.19,>=2.18->tensorflow-intel==2.18.0->tensorflow) (3.0.2)\n",
      "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\program files\\python312\\lib\\site-packages (from rich->keras>=3.5.0->tensorflow-intel==2.18.0->tensorflow) (3.0.0)\n",
      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\program files\\python312\\lib\\site-packages (from rich->keras>=3.5.0->tensorflow-intel==2.18.0->tensorflow) (2.18.0)\n",
      "Requirement already satisfied: mdurl~=0.1 in c:\\program files\\python312\\lib\\site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.5.0->tensorflow-intel==2.18.0->tensorflow) (0.1.2)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[notice] A new release of pip is available: 24.0 -> 25.0.1\n",
      "[notice] To update, run: python.exe -m pip install --upgrade pip\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:29:54.560116Z",
     "iopub.status.busy": "2025-01-23T07:29:54.559818Z",
     "iopub.status.idle": "2025-01-23T07:35:45.302283Z",
     "shell.execute_reply": "2025-01-23T07:35:45.301746Z",
     "shell.execute_reply.started": "2025-01-23T07:29:54.560093Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:02.993335Z",
     "start_time": "2025-03-01T08:47:54.800457Z"
    }
   },
   "source": [
    "from tensorflow import keras\n",
    "#用karas有的数据集imdb，电影分类,分电影是积极的，还是消极的\n",
    "imdb = keras.datasets.imdb\n",
    "#载入数据使用下面两个参数\n",
    "vocab_size = 10000  #词典大小，仅保留训练数据中前10000个最经常出现的单词，低频单词被舍弃\n",
    "index_from = 3  #0,1,2,3空出来做别的事\n",
    "#前一万个词出现词频最高的会保留下来进行处理，后面的作为特殊字符处理，\n",
    "# 小于3的id都是特殊字符，下面代码有写\n",
    "# 需要注意的一点是取出来的词表还是从1开始的，需要做处理\n",
    "(train_data, train_labels), (test_data, test_labels) = imdb.load_data(\n",
    "    num_words = vocab_size, index_from = index_from)"
   ],
   "outputs": [],
   "execution_count": 3
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:45.303689Z",
     "iopub.status.busy": "2025-01-23T07:35:45.303325Z",
     "iopub.status.idle": "2025-01-23T07:35:45.306973Z",
     "shell.execute_reply": "2025-01-23T07:35:45.306509Z",
     "shell.execute_reply.started": "2025-01-23T07:35:45.303669Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:02.997010Z",
     "start_time": "2025-03-01T08:48:02.994332Z"
    }
   },
   "source": [
    "print(\"train\", train_data.shape, train_labels.shape)\n",
    "print(\"test\", test_data.shape, test_labels.shape)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train (25000,) (25000,)\n",
      "test (25000,) (25000,)\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:45.308369Z",
     "iopub.status.busy": "2025-01-23T07:35:45.308173Z",
     "iopub.status.idle": "2025-01-23T07:35:51.559237Z",
     "shell.execute_reply": "2025-01-23T07:35:51.558733Z",
     "shell.execute_reply.started": "2025-01-23T07:35:45.308349Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:03.047023Z",
     "start_time": "2025-03-01T08:48:02.998006Z"
    }
   },
   "source": [
    "#载入词表，看下词表长度，词表就像英语字典\n",
    "word_index = imdb.get_word_index()\n",
    "print(len(word_index))\n",
    "print(type(word_index))\n",
    "#词表虽然有8万多，但是我们只载入了最高频的1万词！！！！"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "88584\n",
      "<class 'dict'>\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构造 word2idx 和 idx2word"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:51.560035Z",
     "iopub.status.busy": "2025-01-23T07:35:51.559852Z",
     "iopub.status.idle": "2025-01-23T07:35:51.589030Z",
     "shell.execute_reply": "2025-01-23T07:35:51.588422Z",
     "shell.execute_reply.started": "2025-01-23T07:35:51.560016Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:03.085348Z",
     "start_time": "2025-03-01T08:48:03.047023Z"
    }
   },
   "source": [
    "word2idx = {word: idx + 3 for word, idx in word_index.items()}\n",
    "word2idx.update({\n",
    "    \"[PAD]\": 0,     # 填充 token\n",
    "    \"[BOS]\": 1,     # begin of sentence\n",
    "    \"[UNK]\": 2,     # 未知 token\n",
    "    \"[EOS]\": 3,     # end of sentence\n",
    "})\n",
    "\n",
    "idx2word = {idx: word for word, idx in word2idx.items()}"
   ],
   "outputs": [],
   "execution_count": 6
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:51.590090Z",
     "iopub.status.busy": "2025-01-23T07:35:51.589645Z",
     "iopub.status.idle": "2025-01-23T07:35:52.854243Z",
     "shell.execute_reply": "2025-01-23T07:35:52.853731Z",
     "shell.execute_reply.started": "2025-01-23T07:35:51.590069Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:04.048604Z",
     "start_time": "2025-03-01T08:48:03.086346Z"
    }
   },
   "source": [
    "# 选择 max_length\n",
    "length_collect = {}\n",
    "for text in train_data:\n",
    "    length = len(text)\n",
    "    length_collect[length] = length_collect.get(length, 0) + 1\n",
    "    \n",
    "MAX_LENGTH = 500\n",
    "plt.bar(length_collect.keys(), length_collect.values())\n",
    "plt.axvline(MAX_LENGTH, label=\"max length\", c=\"gray\", ls=\":\")\n",
    "plt.legend()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 7
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tokenizer"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:52.855066Z",
     "iopub.status.busy": "2025-01-23T07:35:52.854875Z",
     "iopub.status.idle": "2025-01-23T07:35:52.890572Z",
     "shell.execute_reply": "2025-01-23T07:35:52.890119Z",
     "shell.execute_reply.started": "2025-01-23T07:35:52.855047Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:04.063662Z",
     "start_time": "2025-03-01T08:48:04.048604Z"
    }
   },
   "source": [
    "class Tokenizer:\n",
    "    def __init__(self, word2idx, idx2word, max_length=500, pad_idx=0, bos_idx=1, eos_idx=3, unk_idx=2):\n",
    "        self.word2idx = word2idx\n",
    "        self.idx2word = idx2word\n",
    "        self.max_length = max_length\n",
    "        self.pad_idx = pad_idx\n",
    "        self.bos_idx = bos_idx\n",
    "        self.eos_idx = eos_idx\n",
    "        self.unk_idx = unk_idx\n",
    "    \n",
    "    def encode(self, text_list, padding_first=False):\n",
    "        \"\"\"如果padding_first == True，则padding加载前面，否则加载后面\"\"\"\n",
    "        max_length = min(self.max_length, 2 + max([len(text) for text in text_list]))\n",
    "        indices_list = []\n",
    "        for text in text_list:\n",
    "            indices = [self.bos_idx] + [self.word2idx.get(word, self.unk_idx) for word in text[:max_length-2]] + [self.eos_idx] #直接切片取前max_length-2个单词，然后加上bos和eos\n",
    "            if padding_first:\n",
    "                indices = [self.pad_idx] * (max_length - len(indices)) + indices\n",
    "            else:\n",
    "                indices = indices + [self.pad_idx] * (max_length - len(indices))\n",
    "            indices_list.append(indices)\n",
    "        return torch.tensor(indices_list)\n",
    "    \n",
    "    \n",
    "    def decode(self, indices_list, remove_bos=True, remove_eos=True, remove_pad=True, split=False):\n",
    "        text_list = []\n",
    "        for indices in indices_list:\n",
    "            text = []\n",
    "            for index in indices:\n",
    "                word = self.idx2word.get(index, \"[UNK]\")\n",
    "                if remove_bos and word == \"[BOS]\":\n",
    "                    continue\n",
    "                if remove_eos and word == \"[EOS]\":\n",
    "                    break\n",
    "                if remove_pad and word == \"[PAD]\":\n",
    "                    break\n",
    "                text.append(word)\n",
    "            text_list.append(\" \".join(text) if not split else text)\n",
    "        return text_list\n",
    "    \n",
    "\n",
    "tokenizer = Tokenizer(word2idx=word2idx, idx2word=idx2word)\n",
    "raw_text = [\"hello world\".split(), \"tokenize text datas with batch\".split(), \"this is a test\".split()]\n",
    "indices = tokenizer.encode(raw_text, padding_first=True)\n",
    "decode_text = tokenizer.decode(indices.tolist(), remove_bos=False, remove_eos=False, remove_pad=False)\n",
    "print(\"raw text\")\n",
    "for raw in raw_text:\n",
    "    print(raw)\n",
    "print(\"indices\")\n",
    "for index in indices:\n",
    "    print(index)\n",
    "print(\"decode text\")\n",
    "for decode in decode_text:\n",
    "    print(decode)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "raw text\n",
      "['hello', 'world']\n",
      "['tokenize', 'text', 'datas', 'with', 'batch']\n",
      "['this', 'is', 'a', 'test']\n",
      "indices\n",
      "tensor([   0,    0,    0,    1, 4825,  182,    3])\n",
      "tensor([    1,     2,  3004,     2,    19, 19233,     3])\n",
      "tensor([   0,    1,   14,    9,    6, 2181,    3])\n",
      "decode text\n",
      "[PAD] [PAD] [PAD] [BOS] hello world [EOS]\n",
      "[BOS] [UNK] text [UNK] with batch [EOS]\n",
      "[PAD] [BOS] this is a test [EOS]\n"
     ]
    }
   ],
   "execution_count": 8
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:52.891234Z",
     "iopub.status.busy": "2025-01-23T07:35:52.891063Z",
     "iopub.status.idle": "2025-01-23T07:35:52.895190Z",
     "shell.execute_reply": "2025-01-23T07:35:52.894734Z",
     "shell.execute_reply.started": "2025-01-23T07:35:52.891215Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:04.067991Z",
     "start_time": "2025-03-01T08:48:04.064659Z"
    }
   },
   "source": [
    "# 看看训练集的数据\n",
    "\n",
    "tokenizer.decode(train_data[:2], remove_bos=False, remove_eos=False, remove_pad=False)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[\"[BOS] this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert [UNK] is an amazing actor and now the same being director [UNK] father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for [UNK] and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also [UNK] to the two little boy's that played the [UNK] of norman and paul they were just brilliant children are often left out of the [UNK] list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all\",\n",
       " \"[BOS] big hair big boobs bad music and a giant safety pin these are the words to best describe this terrible movie i love cheesy horror movies and i've seen hundreds but this had got to be on of the worst ever made the plot is paper thin and ridiculous the acting is an abomination the script is completely laughable the best is the end showdown with the cop and how he worked out who the killer is it's just so damn terribly written the clothes are sickening and funny in equal [UNK] the hair is big lots of boobs [UNK] men wear those cut [UNK] shirts that show off their [UNK] sickening that men actually wore them and the music is just [UNK] trash that plays over and over again in almost every scene there is trashy music boobs and [UNK] taking away bodies and the gym still doesn't close for [UNK] all joking aside this is a truly bad film whose only charm is to look back on the disaster that was the 80's and have a good old laugh at how bad everything was back then\"]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 9
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据集与 DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:52.896104Z",
     "iopub.status.busy": "2025-01-23T07:35:52.895822Z",
     "iopub.status.idle": "2025-01-23T07:35:56.193733Z",
     "shell.execute_reply": "2025-01-23T07:35:56.193207Z",
     "shell.execute_reply.started": "2025-01-23T07:35:52.896084Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.628074Z",
     "start_time": "2025-03-01T08:48:04.067991Z"
    }
   },
   "source": [
    "from torch.utils.data import Dataset, DataLoader\n",
    "\n",
    "class IMDBDataset(Dataset):\n",
    "    def __init__(self, data, labels, remain_length=True):\n",
    "        if remain_length:\n",
    "            self.data = tokenizer.decode(data, remove_bos=False, remove_eos=False, remove_pad=False)\n",
    "        else:\n",
    "            # 缩减一下数据\n",
    "            self.data = tokenizer.decode(data)\n",
    "        self.labels = labels\n",
    "    \n",
    "    def __getitem__(self, index):\n",
    "        text = self.data[index]\n",
    "        label = self.labels[index]\n",
    "        return text, label\n",
    "    \n",
    "    def __len__(self):\n",
    "        return len(self.data)\n",
    "    \n",
    "    \n",
    "def collate_fct(batch):\n",
    "    text_list = [item[0].split() for item in batch]\n",
    "    label_list = [item[1] for item in batch]\n",
    "    # 这里使用 padding first\n",
    "    text_list = tokenizer.encode(text_list, padding_first=True).to(dtype=torch.int)\n",
    "    return text_list, torch.tensor(label_list).reshape(-1, 1).to(dtype=torch.float)\n",
    "\n",
    "\n",
    "# 用RNN，缩短序列长度\n",
    "train_ds = IMDBDataset(train_data, train_labels, remain_length=False)\n",
    "test_ds = IMDBDataset(test_data, test_labels, remain_length=False)"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.196049Z",
     "iopub.status.busy": "2025-01-23T07:35:56.195624Z",
     "iopub.status.idle": "2025-01-23T07:35:56.199003Z",
     "shell.execute_reply": "2025-01-23T07:35:56.198565Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.196029Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.632072Z",
     "start_time": "2025-03-01T08:48:05.628074Z"
    }
   },
   "source": [
    "batch_size = 128\n",
    "train_dl = DataLoader(train_ds, batch_size=batch_size, shuffle=True, collate_fn=collate_fct)\n",
    "test_dl = DataLoader(test_ds, batch_size=batch_size, shuffle=False, collate_fn=collate_fct)"
   ],
   "outputs": [],
   "execution_count": 11
  },
  {
   "cell_type": "code",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.199854Z",
     "iopub.status.busy": "2025-01-23T07:35:56.199670Z",
     "iopub.status.idle": "2025-01-23T07:35:56.239784Z",
     "shell.execute_reply": "2025-01-23T07:35:56.239261Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.199836Z"
    },
    "jupyter": {
     "outputs_hidden": false
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.674448Z",
     "start_time": "2025-03-01T08:48:05.632072Z"
    }
   },
   "source": [
    "for text, label in train_dl:\n",
    "    print(text.shape, label.shape)\n",
    "    break"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([128, 500]) torch.Size([128, 1])\n"
     ]
    }
   ],
   "execution_count": 12
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 定义模型"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.240561Z",
     "iopub.status.busy": "2025-01-23T07:35:56.240373Z",
     "iopub.status.idle": "2025-01-23T07:35:56.249061Z",
     "shell.execute_reply": "2025-01-23T07:35:56.248627Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.240542Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.682024Z",
     "start_time": "2025-03-01T08:48:05.675449Z"
    }
   },
   "source": [
    "class RNN(nn.Module):\n",
    "    def __init__(self, embedding_dim=16, hidden_dim=64, vocab_size=vocab_size, num_layers=1, bidirectional=False):\n",
    "        super(RNN, self).__init__()\n",
    "        self.embeding = nn.Embedding(vocab_size, embedding_dim)\n",
    "        self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional)\n",
    "        self.layer = nn.Linear(hidden_dim * (2 if bidirectional else 1), hidden_dim)\n",
    "        self.fc = nn.Linear(hidden_dim, 1)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # [bs, seq length]\n",
    "        x = self.embeding(x)\n",
    "        # [bs, seq length, embedding_dim] -> shape [bs, embedding_dim, seq length]\n",
    "        seq_output, final_hidden = self.rnn(x)\n",
    "        # print(f'seq_output.shape={seq_output.shape}')\n",
    "        # print(f'final_hidden.shape={final_hidden.shape}')\n",
    "        # [bs, seq length, hidden_dim], [*, bs, hidden_dim]\n",
    "        x = seq_output[:, -1, :]\n",
    "        # 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)\n",
    "        x = self.layer(x)\n",
    "        x = self.fc(x)\n",
    "        return x\n",
    "    \n",
    "\n",
    "    \n",
    "print(\"{:=^80}\".format(\" 一层单向 RNN \"))       \n",
    "for key, value in RNN().named_parameters():\n",
    "    print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=================================== 一层单向 RNN ===================================\n",
      "            embeding.weight             paramerters num: 160000\n",
      "            rnn.weight_ih_l0            paramerters num: 1024\n",
      "            rnn.weight_hh_l0            paramerters num: 4096\n",
      "             rnn.bias_ih_l0             paramerters num: 64\n",
      "             rnn.bias_hh_l0             paramerters num: 64\n",
      "              layer.weight              paramerters num: 4096\n",
      "               layer.bias               paramerters num: 64\n",
      "               fc.weight                paramerters num: 64\n",
      "                fc.bias                 paramerters num: 1\n"
     ]
    }
   ],
   "execution_count": 13
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.249936Z",
     "iopub.status.busy": "2025-01-23T07:35:56.249557Z",
     "iopub.status.idle": "2025-01-23T07:35:56.305655Z",
     "shell.execute_reply": "2025-01-23T07:35:56.305241Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.249916Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.704024Z",
     "start_time": "2025-03-01T08:48:05.684020Z"
    }
   },
   "source": [
    "#做前向计算，看下输出的shape\n",
    "model = RNN()  \n",
    "sample_inputs = torch.randint(0, vocab_size, (1, 500))\n",
    "model(sample_inputs).shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 1])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 14
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.306505Z",
     "iopub.status.busy": "2025-01-23T07:35:56.306139Z",
     "iopub.status.idle": "2025-01-23T07:35:56.309478Z",
     "shell.execute_reply": "2025-01-23T07:35:56.309008Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.306486Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.708232Z",
     "start_time": "2025-03-01T08:48:05.705024Z"
    }
   },
   "source": [
    "64*64"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4096"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 15
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.310313Z",
     "iopub.status.busy": "2025-01-23T07:35:56.309966Z",
     "iopub.status.idle": "2025-01-23T07:35:56.312405Z",
     "shell.execute_reply": "2025-01-23T07:35:56.311992Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.310295Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:05.711454Z",
     "start_time": "2025-03-01T08:48:05.709227Z"
    }
   },
   "source": [
    "# print(\"{:=^80}\".format(\" 一层双向 RNN \"))       \n",
    "# for key, value in RNN(bidirectional=True).named_parameters():\n",
    "#     print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")\n",
    "# \n",
    "#     \n",
    "# print(\"{:=^80}\".format(\" 俩层单向 RNN \"))       \n",
    "# for key, value in RNN(num_layers=2).named_parameters():\n",
    "#     print(f\"{key:^40}paramerters num: {np.prod(value.shape)}\")"
   ],
   "outputs": [],
   "execution_count": 16
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.313012Z",
     "iopub.status.busy": "2025-01-23T07:35:56.312850Z",
     "iopub.status.idle": "2025-01-23T07:35:56.418014Z",
     "shell.execute_reply": "2025-01-23T07:35:56.417563Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.312994Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:06.084104Z",
     "start_time": "2025-03-01T08:48:05.712451Z"
    }
   },
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "@torch.no_grad()\n",
    "def evaluating(model, dataloader, loss_fct):\n",
    "    loss_list = []\n",
    "    pred_list = []\n",
    "    label_list = []\n",
    "    for datas, labels in dataloader:\n",
    "        datas = datas.to(device)\n",
    "        labels = labels.to(device)\n",
    "        # 前向计算\n",
    "        logits = model(datas)\n",
    "        loss = loss_fct(logits, labels)         # 验证集损失\n",
    "        loss_list.append(loss.item())\n",
    "        # 二分类\n",
    "        preds = logits > 0\n",
    "        pred_list.extend(preds.cpu().numpy().tolist())\n",
    "        label_list.extend(labels.cpu().numpy().tolist())\n",
    "        \n",
    "    acc = accuracy_score(label_list, pred_list)\n",
    "    return np.mean(loss_list), acc\n"
   ],
   "outputs": [],
   "execution_count": 17
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### TensorBoard 可视化\n",
    "\n",
    "\n",
    "训练过程中可以使用如下命令启动tensorboard服务。\n",
    "\n",
    "```shell\n",
    "tensorboard \\\n",
    "    --logdir=runs \\     # log 存放路径\n",
    "    --host 0.0.0.0 \\    # ip\n",
    "    --port 8848         # 端口\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.419025Z",
     "iopub.status.busy": "2025-01-23T07:35:56.418548Z",
     "iopub.status.idle": "2025-01-23T07:35:56.559217Z",
     "shell.execute_reply": "2025-01-23T07:35:56.558785Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.419005Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:06.246637Z",
     "start_time": "2025-03-01T08:48:06.085101Z"
    }
   },
   "source": [
    "from torch.utils.tensorboard import SummaryWriter\n",
    "\n",
    "\n",
    "class TensorBoardCallback:\n",
    "    def __init__(self, log_dir, flush_secs=10):\n",
    "        \"\"\"\n",
    "        Args:\n",
    "            log_dir (str): dir to write log.\n",
    "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
    "        \"\"\"\n",
    "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs)\n",
    "\n",
    "    def draw_model(self, model, input_shape):\n",
    "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape))\n",
    "        \n",
    "    def add_loss_scalars(self, step, loss, val_loss):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/loss\", \n",
    "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
    "            global_step=step,\n",
    "            )\n",
    "        \n",
    "    def add_acc_scalars(self, step, acc, val_acc):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/accuracy\",\n",
    "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
    "            global_step=step,\n",
    "        )\n",
    "        \n",
    "    def add_lr_scalars(self, step, learning_rate):\n",
    "        self.writer.add_scalars(\n",
    "            main_tag=\"training/learning_rate\",\n",
    "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
    "            global_step=step,\n",
    "            \n",
    "        )\n",
    "    \n",
    "    def __call__(self, step, **kwargs):\n",
    "        # add loss\n",
    "        loss = kwargs.pop(\"loss\", None)\n",
    "        val_loss = kwargs.pop(\"val_loss\", None)\n",
    "        if loss is not None and val_loss is not None:\n",
    "            self.add_loss_scalars(step, loss, val_loss)\n",
    "        # add acc\n",
    "        acc = kwargs.pop(\"acc\", None)\n",
    "        val_acc = kwargs.pop(\"val_acc\", None)\n",
    "        if acc is not None and val_acc is not None:\n",
    "            self.add_acc_scalars(step, acc, val_acc)\n",
    "        # add lr\n",
    "        learning_rate = kwargs.pop(\"lr\", None)\n",
    "        if learning_rate is not None:\n",
    "            self.add_lr_scalars(step, learning_rate)\n"
   ],
   "outputs": [],
   "execution_count": 18
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Save Best\n"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.560120Z",
     "iopub.status.busy": "2025-01-23T07:35:56.559748Z",
     "iopub.status.idle": "2025-01-23T07:35:56.564773Z",
     "shell.execute_reply": "2025-01-23T07:35:56.564281Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.560101Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:06.251244Z",
     "start_time": "2025-03-01T08:48:06.246637Z"
    }
   },
   "source": [
    "class SaveCheckpointsCallback:\n",
    "    def __init__(self, save_dir, save_step=5000, save_best_only=True):\n",
    "        \"\"\"\n",
    "        Save checkpoints each save_epoch epoch. \n",
    "        We save checkpoint by epoch in this implementation.\n",
    "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
    "\n",
    "        Args:\n",
    "            save_dir (str): dir to save checkpoint\n",
    "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
    "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
    "        \"\"\"\n",
    "        self.save_dir = save_dir\n",
    "        self.save_step = save_step\n",
    "        self.save_best_only = save_best_only\n",
    "        self.best_metrics = -1\n",
    "        \n",
    "        # mkdir\n",
    "        if not os.path.exists(self.save_dir):\n",
    "            os.mkdir(self.save_dir)\n",
    "        \n",
    "    def __call__(self, step, state_dict, metric=None):\n",
    "        if step % self.save_step > 0:\n",
    "            return\n",
    "        \n",
    "        if self.save_best_only:\n",
    "            assert metric is not None\n",
    "            if metric >= self.best_metrics:\n",
    "                # save checkpoints\n",
    "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\"))\n",
    "                # update best metrics\n",
    "                self.best_metrics = metric\n",
    "        else:\n",
    "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\"))\n",
    "\n"
   ],
   "outputs": [],
   "execution_count": 19
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Early Stop"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:35:56.565759Z",
     "iopub.status.busy": "2025-01-23T07:35:56.565308Z",
     "iopub.status.idle": "2025-01-23T07:35:56.569498Z",
     "shell.execute_reply": "2025-01-23T07:35:56.569050Z",
     "shell.execute_reply.started": "2025-01-23T07:35:56.565738Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:48:06.255470Z",
     "start_time": "2025-03-01T08:48:06.252241Z"
    }
   },
   "source": [
    "class EarlyStopCallback:\n",
    "    def __init__(self, patience=5, min_delta=0.01):\n",
    "        \"\"\"\n",
    "\n",
    "        Args:\n",
    "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
    "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute \n",
    "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
    "        \"\"\"\n",
    "        self.patience = patience\n",
    "        self.min_delta = min_delta\n",
    "        self.best_metric = -1\n",
    "        self.counter = 0\n",
    "        \n",
    "    def __call__(self, metric):\n",
    "        if metric >= self.best_metric + self.min_delta:\n",
    "            # update best metric\n",
    "            self.best_metric = metric\n",
    "            # reset counter \n",
    "            self.counter = 0\n",
    "        else: \n",
    "            self.counter += 1\n",
    "            \n",
    "    @property\n",
    "    def early_stop(self):\n",
    "        return self.counter >= self.patience\n"
   ],
   "outputs": [],
   "execution_count": 20
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecutionIndicator": {
     "show": true
    },
    "execution": {
     "iopub.execute_input": "2025-01-23T07:48:40.262148Z",
     "iopub.status.busy": "2025-01-23T07:48:40.261735Z",
     "iopub.status.idle": "2025-01-23T07:51:27.123148Z",
     "shell.execute_reply": "2025-01-23T07:51:27.122658Z",
     "shell.execute_reply.started": "2025-01-23T07:48:40.262123Z"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-03-01T08:50:47.517010Z",
     "start_time": "2025-03-01T08:48:06.256467Z"
    }
   },
   "source": [
    "# 训练\n",
    "def training(\n",
    "    model, \n",
    "    train_loader, \n",
    "    val_loader, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=None,\n",
    "    save_ckpt_callback=None,\n",
    "    early_stop_callback=None,\n",
    "    eval_step=500,\n",
    "    ):\n",
    "    record_dict = {\n",
    "        \"train\": [],\n",
    "        \"val\": []\n",
    "    }\n",
    "    \n",
    "    global_step = 0\n",
    "    model.train()\n",
    "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
    "        for epoch_id in range(epoch):\n",
    "            # training\n",
    "            for datas, labels in train_loader:\n",
    "                datas = datas.to(device)\n",
    "                labels = labels.to(device)\n",
    "                # 梯度清空\n",
    "                optimizer.zero_grad()\n",
    "                # 模型前向计算\n",
    "                logits = model(datas)\n",
    "                # 计算损失\n",
    "                loss = loss_fct(logits, labels)\n",
    "                # 梯度回传\n",
    "                loss.backward()\n",
    "                # 调整优化器，包括学习率的变动等\n",
    "                optimizer.step()\n",
    "                preds = logits > 0\n",
    "            \n",
    "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())    \n",
    "                loss = loss.cpu().item()\n",
    "                # record\n",
    "                \n",
    "                record_dict[\"train\"].append({\n",
    "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
    "                })\n",
    "                \n",
    "                # evaluating\n",
    "                if global_step % eval_step == 0:\n",
    "                    model.eval()\n",
    "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
    "                    record_dict[\"val\"].append({\n",
    "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
    "                    })\n",
    "                    model.train()\n",
    "                    \n",
    "                    # 1. 使用 tensorboard 可视化\n",
    "                    if tensorboard_callback is not None:\n",
    "                        tensorboard_callback(\n",
    "                            global_step, \n",
    "                            loss=loss, val_loss=val_loss,\n",
    "                            acc=acc, val_acc=val_acc,\n",
    "                            lr=optimizer.param_groups[0][\"lr\"],\n",
    "                            )\n",
    "                \n",
    "                    # 2. 保存模型权重 save model checkpoint\n",
    "                    if save_ckpt_callback is not None:\n",
    "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc)\n",
    "\n",
    "                    # 3. 早停 Early Stop\n",
    "                    if early_stop_callback is not None:\n",
    "                        early_stop_callback(val_acc)\n",
    "                        if early_stop_callback.early_stop:\n",
    "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
    "                            return record_dict\n",
    "                    \n",
    "                # udate step\n",
    "                global_step += 1\n",
    "                pbar.update(1)\n",
    "                pbar.set_postfix({\"epoch\": epoch_id})\n",
    "        \n",
    "    return record_dict\n",
    "        \n",
    "\n",
    "epoch = 20\n",
    "\n",
    "# model = RNN(bidirectional=True) #双向单层\n",
    "model = RNN(num_layers=2)\n",
    "# model = RNN()\n",
    "# 1. 定义损失函数 采用交叉熵损失 (但是二分类)\n",
    "loss_fct = F.binary_cross_entropy_with_logits\n",
    "# 2. 定义优化器 采用 adam\n",
    "# Optimizers specified in the torch.optim package\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "\n",
    "# 1. tensorboard 可视化\n",
    "if not os.path.exists(\"runs\"):\n",
    "    os.mkdir(\"runs\")\n",
    "tensorboard_callback = TensorBoardCallback(\"runs/imdb-rnn\")\n",
    "# tensorboard_callback.draw_model(model, [1, MAX_LENGTH])\n",
    "# 2. save best\n",
    "if not os.path.exists(\"checkpoints\"):\n",
    "    os.makedirs(\"checkpoints\")\n",
    "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints/imdb-rnn\", save_step=len(train_dl), save_best_only=True)\n",
    "# 3. early stop\n",
    "early_stop_callback = EarlyStopCallback(patience=10)\n",
    "\n",
    "model = model.to(device)\n",
    "record = training(\n",
    "    model, \n",
    "    train_dl, \n",
    "    test_dl, \n",
    "    epoch, \n",
    "    loss_fct, \n",
    "    optimizer, \n",
    "    tensorboard_callback=tensorboard_callback,\n",
    "    save_ckpt_callback=save_ckpt_callback,\n",
    "    early_stop_callback=early_stop_callback,\n",
    "    eval_step=len(train_dl)\n",
    "    )"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  0%|          | 0/3920 [00:00<?, ?it/s]"
      ],
      "application/vnd.jupyter.widget-view+json": {
       "version_major": 2,
       "version_minor": 0,
       "model_id": "4719217331344f2780395a2ac9a95358"
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 21
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:51:27.124289Z",
     "iopub.status.busy": "2025-01-23T07:51:27.124039Z",
     "iopub.status.idle": "2025-01-23T07:51:27.327899Z",
     "shell.execute_reply": "2025-01-23T07:51:27.327360Z",
     "shell.execute_reply.started": "2025-01-23T07:51:27.124267Z"
    },
    "ExecuteTime": {
     "end_time": "2025-03-01T08:50:47.679557Z",
     "start_time": "2025-03-01T08:50:47.518007Z"
    }
   },
   "source": [
    "#画线要注意的是损失是不一定在零到1之间的\n",
    "def plot_learning_curves(record_dict, sample_step=500):\n",
    "    # build DataFrame\n",
    "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
    "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
    "\n",
    "    # plot\n",
    "    fig_num = len(train_df.columns)\n",
    "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5))\n",
    "    for idx, item in enumerate(train_df.columns):    \n",
    "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
    "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
    "        axs[idx].grid()\n",
    "        axs[idx].legend()\n",
    "        # axs[idx].set_xticks(range(0, train_df.index[-1], 5000))\n",
    "        # axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", range(0, train_df.index[-1], 5000)))\n",
    "        axs[idx].set_xlabel(\"step\")\n",
    "    \n",
    "    plt.show()\n",
    "\n",
    "plot_learning_curves(record, sample_step=10)  #横坐标是 steps"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 22
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2025-01-23T07:51:27.328975Z",
     "iopub.status.busy": "2025-01-23T07:51:27.328505Z",
     "iopub.status.idle": "2025-01-23T07:51:31.051557Z",
     "shell.execute_reply": "2025-01-23T07:51:31.051010Z",
     "shell.execute_reply.started": "2025-01-23T07:51:27.328951Z"
    },
    "tags": [],
    "ExecuteTime": {
     "end_time": "2025-03-01T08:50:50.555064Z",
     "start_time": "2025-03-01T08:50:47.679557Z"
    }
   },
   "source": [
    "# dataload for evaluating\n",
    "\n",
    "# load checkpoints\n",
    "model.load_state_dict(torch.load(\"checkpoints/imdb-rnn/best.ckpt\", map_location=\"cpu\"))\n",
    "\n",
    "model.eval()\n",
    "loss, acc = evaluating(model, test_dl, loss_fct)\n",
    "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:     0.5751\n",
      "accuracy: 0.7071\n"
     ]
    }
   ],
   "execution_count": 23
  }
 ],
 "metadata": {
  "kaggle": {
   "accelerator": "gpu",
   "dataSources": [],
   "dockerImageVersionId": 30616,
   "isGpuEnabled": true,
   "isInternetEnabled": true,
   "language": "python",
   "sourceType": "notebook"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
